/*
  2019-5-17
  闭包
*/
//函数foo，foo1，fun内部console.log()输出到控制台的内容的解决办法
//分析执行console.log()函数的执行上下文的[[Scope]]内保存的可以访问到的上级的变量
function foo(){
  var x=10;
  return function(){
    //函数的[[Scope]]保存的最近可访问的x是foo内部的x
    console.log(x);//10
  };
}
var x=20;
var return_foo=foo();
console.log(return_foo());  //undefined，未返回内容



var z=10;
function foo1(){
  var z=20;
  function innerX(){
    //函数innerX的执行上下文内[[Scope]]保存的可访问的z是foo1内部的z
    console.log(z);
  }
  return innerX();
}
foo1();



var y=10;
function fun(){
  console.log(y);
}

(function(fun){
  var y=20;
  //函数fun内部可访问的y是全局变量y
  //fun执行时，创建的执行上下文内部的作用域链[[Scope]]保存的时全局变量y
  fun();//10
})(fun)